# rm -rf ./build
# mkdir build
# cd build
# cmake ..
# make
# ./fuzzy-pid
# python3 ../showPage.py

#!/bin/bash

# 配置参数
BUILD_DIR="./build"
DATA_FILE="test.csv"  # 修正为当前目录下的文件
PYTHON_SCRIPT="../showPage.py"
MAX_RETRIES=20
RETRY_INTERVAL=0.3

# 1. 清理构建目录
echo "----- 清理旧构建 -----"
rm -rf "$BUILD_DIR"
mkdir -p "$BUILD_DIR" || { echo "错误：无法创建 build 目录"; exit 1; }

# 2. 构建项目
cd "$BUILD_DIR" || exit 1
echo "----- 生成构建系统 -----"
# cmake .. || { echo "CMake 配置失败"; exit 1; }

# make -j$(nproc) || { echo "编译失败"; exit 1; }
# 静默编译（仅显示错误）

# 静默生成构建系统（隐藏 CMake 检查过程）
cmake .. >/dev/null 2>&1
if [ $? -ne 0 ]; then
    echo "CMake 配置失败"
    exit 1
else
    echo "CMake 配置成功"
fi

echo "----- 编译项目 -----"

# make --silent -j$(nproc)
make -j$(nproc) --silent
if [ $? -ne 0 ]; then
    echo "编译失败"
    exit 1
else
    echo "编译成功"
    # 运行程序（示例）
    # ./fuzzy-pid
fi

# 3. 运行程序
echo "----- 执行模糊PID程序 -----"
executable=$(find . -maxdepth 1 -name "fuzzy-pid" -type f -executable)
if [ -z "$executable" ]; then
    echo "错误：未找到可执行文件 fuzzy-pid"; exit 1
fi

echo "运行程序: $PWD/$executable"
if ./"$executable"; then
    echo "----- 模糊PID程序成功执行 -----"
    
    # 4. 严格检查数据文件（当前目录下的 test.csv）
    echo "当前工作目录: $(pwd)"
    echo "检查数据文件: $DATA_FILE"
    ls -l "$DATA_FILE" 2>/dev/null  # 直接检查当前目录
    
    for ((i=1; i<=MAX_RETRIES; i++)); do
        if [ -f "$DATA_FILE" ]; then
            if [ -s "$DATA_FILE" ]; then
                echo "数据文件验证通过 (大小: $(wc -l < "$DATA_FILE") 行)"
                break
            else
                echo "等待数据填充... ($i/$MAX_RETRIES)"
                sleep "$RETRY_INTERVAL"
            fi
        else
            echo "等待文件生成... ($i/$MAX_RETRIES)"
            sleep "$RETRY_INTERVAL"
        fi
        
        if [ "$i" -eq "$MAX_RETRIES" ]; then
            echo "错误：超时未检测到有效数据文件"
            echo "调试信息："
            ls -l  # 显示当前目录下所有文件
            exit 1
        fi
    done
    
    # 5. 执行Python脚本（传递绝对路径）
    echo "----- 启动Python可视化 -----"
    if [ -f "../showPage.py" ]; then
        # 在Shell脚本中找到数据文件的绝对路径
        data_file_abs=$(realpath "$DATA_FILE")
        
        # 调用Python脚本时传递绝对路径
        python3 "$PYTHON_SCRIPT" "$data_file_abs"
        # python3 "$PYTHON_SCRIPT" "$(pwd)/$DATA_FILE"  # 传递绝对路径
    else
        echo "错误：Python脚本不存在于 $PYTHON_SCRIPT"; exit 1
    fi
else
    echo "错误：模糊PID程序执行失败"; exit 1
fi